#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SHM_SIZE 1024


int main()
{
    // 1.创建一个key
    key_t key=ftok(".",'A');
    if(key<0)
    {
        perror("ftok failed");
        exit(EXIT_FAILURE);
    }
    // 2.创建共享内存
    int shmid=shmget(key,SHM_SIZE,IPC_CREAT|0666);
    if(shmid<0)
    {
        perror("shmget failed");
        exit(EXIT_FAILURE);
    }
    // 3.将共享内存映射到进程的虚拟地址空间
    char* shmaddr=(char*)shmat(shmid,NULL,0);
    if(shmaddr==(char*)-1)
    {
        perror("shmat failed");
        exit(EXIT_FAILURE);
    }
    // 4.使用共享内存
    const char* msg="i am process A\n";
    strncpy(shmaddr,msg,SHM_SIZE);
    // 5.解除映射
    if(shmdt(shmaddr)<0)
    {
        perror("shmdt failed");
        exit(EXIT_FAILURE);
    }

     // 等待读进程读取数据（可选同步机制）
     printf("Write process: Data written. Press Enter to exit...\n");
     getchar();

    // 6.删除共享内存
    if(shmctl(shmid,IPC_RMID,NULL)<0)
    {
        perror("shmctl failed");
        exit(EXIT_FAILURE);
    }
    return 0;

}